;数值显示   (未完工)
;问题： 编程，将data段中的数据以十进制的形式显示出来.
;data  segment
;   dw 123,12666,1,8,3,38
;data   ends

;这些数据在内存中都是二进制信息，标记了数值的大小，要把它们显示到屏幕上，成为我们
;能够读懂的信息，需要进行信息的转换.
;比如,数值12666 ，在机器中存储为二进制信息.计算机可以理解它，而要在显示器上读到
;可以理解的数值12666 ， 我们看到的应该是一串字符:   "12666" ,由于显卡遵循的是
;ASCII编码，为了让我们能在显示器上看到这串字符,
;它在机器中应以ASCII码 的形式存储为:   31H,32H,36H,36H,36H(字符"0" ~ "9" 对应的ASCII码为 30H ~ 39H)
;通过上面的分析可以看到，在概念世界里，有一个抽象的数据12666 ，它表示了一个数值的大小
;在显示世界中它可以有多中表示形式，可以在点子机器中以高低电平(二进制) 的形式存储，
;也可以在纸上，黑板上，屏幕上以人类的语言 "12666" 来书写。现在，我们面临的问题就是
;要将同一抽象的数据，从一种表示形式转化为另一种表示形式

;可见，要将数据用十进制形式显示到屏幕上，要进行两步工作：
;1.将用二进制信息存储的数据转变为十进制形式的字符串
;2.显示十进制形式的字符

;第二步我们在本次实验的第一个子程序已经实现，在这里只要调用一下show_str 即可。
;我们来讨论第一步，因为将二进制信息转变为十进制形式的字符串也是经常要用到的功能
;我们应该为它编写一个通用的子程序

;子程序描述：
;名称：dtoc
;功能：将word型数据转变为表示十进制数的字符串，字符串以0位结尾符
;参数：(ax)=word型数据
;     ds:si指向字符串的首地址
;返回:无
;应用举例：编程，将数据12666以十进制的形式在屏幕的8行3列，用绿色显示出来。
;在显示时我们调用本次实验的第一个子程序show_str


;提示：
;(1).要得到字符串 "12666",就是要得到一列表示该字符串的ASCII码：31H,32H,36H,36H,36H
;十进制数码字符对应的ASCII码 = 十进制数码值 + 30H
;要的到表示十进制的字符串,先求十进制数每位的值.

;(2).如何处理:  用12666 除以10，循环5次，记下每次的余数，将每次的余数分别加30H,便得到了表示十进制数的ASCII码串

;3. 对(2)的质疑:
;   在已知数据是12666 的情况下，知道进行5次循环，可在实际问题中，数据的值是多少程序员并不知道,也就是说，程序员不能事先确定循环次数
;那么，如何确定数据各位的值已经全部求出了呢？我们可以看出，只要是除到商为0，各位的值就已经全部求出，可以使用jcxz指令来实现相关的功能.
assume cs:code
data segment
    db 10 dup (0)
data ends

code segment
start:mov ax,12666
      mov bx,data
      mov ds,bx
      mov si,0
      call dtoc

      mov dh,8
      mov dl,3
      mov cl,2
      call show_str



code ends
end start